﻿//-----------------------------------------------------------------------
// <copyright file="FactDef.cs" company="tuliprules.org">
//     Copyright (c) 2010 tuplelister, tuliprules.org.
// </copyright>
// <summary>This is the FactDef class.</summary>
//-----------------------------------------------------------------------

namespace Tulip.Rules.CodeGen.Models.ClosedWorld
{
    using System.Diagnostics.CodeAnalysis;
    using Engine.Models.ClosedWorld;

    /// <summary>
    /// Fact definition.
    /// </summary>
    [SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1401:FieldsMustBePrivate",
        Justification = "Reviewed. Suppression is OK here.")]
    public class FactDef
    {
        /// <summary>
        /// The name of the fact.
        /// </summary>
        public string FactName;

        /// <summary>
        /// The type name of the fact.
        /// </summary>
        public string TypeName;

        /// <summary>
        /// The name of the assembly that houses the fact type.
        /// </summary>
        public string TypeAssemblyName;

        /// <summary>
        /// The major version number of the assembly that houses the fact type.
        /// </summary>
        public int TypeAssemblyVersionMajor;

        /// <summary>
        /// The minor version number of the assembly that houses the fact type.
        /// </summary>
        public int TypeAssemblyVersionMinor;

        /// <summary>
        /// The revision version number of the assembly that houses the fact type.
        /// </summary>
        public int TypeAssemblyVersionRevision;

        /// <summary>
        /// The build version number of the assembly that houses the fact type.
        /// </summary>
        public int TypeAssemblyVersionBuild;

        /// <summary>
        /// The cukture of the assembly that houses the fact type.
        /// </summary>
        public string TypeAssemblyCulture;

        /// <summary>
        /// The public key token of the assembly that houses the fact type.
        /// </summary>
        public string TypeAssemblyPublicKeyToken;

        /// <summary>
        /// The kind the fact type.
        /// </summary>
        public TypeKind TypeKind;

        /// <summary>
        /// The visibility the fact type.
        /// </summary>
        public TypeVisibility TypeVisibility;

        /// <summary>
        /// Indicates if the fact type is static.
        /// </summary>
        public bool TypeIsStatic;

        /// <summary>
        /// The generic type argument of the fact type.
        /// </summary>
        public string TypeGenericTypeArgument;
    }
}
